package com.weed.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.Connection;

import com.weed.core.WeedException;

/**
 *
 * 函数说明：
 *    用于封装SQL语句。
 *
 */
public interface Batcher {
  /**
   * 用于获得预处理的Prepare
   * @param sql String
   * @param scrollable boolean
   * @return PreparedStatement
   * @throws SQLException
   * @throws WeedException
   */
  public PreparedStatement prepareQueryStatement(String sql, boolean scrollable) throws
      SQLException, WeedException;


  /**
   * 根据预处理的SQL语句，生成PreparedStatement.是否自动生成主键。
   * @param sql String
   * @param useGetGeneratedKeys boolean
   * @return PreparedStatement
   * @throws SQLException
   * @throws WeedException
   */
  public PreparedStatement prepareStatement(String sql,
                                            boolean useGetGeneratedKeys) throws
      SQLException, WeedException;
  /**
   * 根据预处理的SQL语句，生成PreparedStatement.
   * @param sql String
   * @return PreparedStatement
   * @throws SQLException
   * @throws WeedException
   */
  public PreparedStatement prepareStatement(String sql) throws SQLException,
      WeedException;
  /**
   * 获得用于执行存储过程的CallableStatement.
   * @param sql String
   * @return CallableStatement
   * @throws SQLException
   * @throws WeedException
   */
  public CallableStatement prepareCallableStatement(String sql) throws
      SQLException, WeedException;
  /**
   * 关于预处理的PreparedStatement。
   * @param ps PreparedStatement
   * @throws SQLException
   */
  public void closeStatement(PreparedStatement ps) throws SQLException;
  /**
   *  添加所有Sql语句提交的异常。
   * @param Exception Exception
   * @throws SQLException
   * @throws WeedException
   */
  public void addToBatch(Exception Exception) throws SQLException,
      WeedException;
  /**
   * 执行批量提交SQL语句。
   * @throws WeedException
   */
  public void executeBatch() throws WeedException;
  /**
   * 关于所有Statements.
   */
  public void closeStatements();
  /**
   * 获得所有的结果集。
   * @param ps PreparedStatement
   * @return ResultSet
   * @throws SQLException
   */
  public ResultSet getResultSet(PreparedStatement ps) throws SQLException;
  /**
   * 打开数据库连接。
   * @return Connection
   * @throws WeedException
   */
  public Connection openConnection() throws WeedException;
  /**
   * 关闭数据库连接。
   * @param conn Connection
   * @throws WeedException
   */
  public void closeConnection(Connection conn) throws WeedException;
  /**
   * 设置事务的超时时间。
   * @param seconds int
   */
  public void setTransactionTimeout(int seconds);
  /**
   * 不设置事务的超时时间。
   */
  public void unsetTransactionTimeout();
}
